<script setup lang="ts">
import { ref } from "vue";
const { ipcRenderer } = require("electron");

const volumeNum = ref(0);

// 请求麦克风权限并获取音频流
navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    const audioCtx = new AudioContext();
    const analyser = audioCtx.createAnalyser();
    const source = audioCtx.createMediaStreamSource(stream);
    const bufferLength = 2048;
    const dataArray = new Uint8Array(bufferLength);

    // 连接音频源到分析器
    source.connect(analyser);
    // 设置分析器参数
    analyser.fftSize = bufferLength;

    // 定时器来读取分析器数据
    setInterval(() => {
      analyser.getByteTimeDomainData(dataArray);
      let volume = 0;
      // 计算音量
      for (let i = 0; i < bufferLength; i++) {
        volume += dataArray[i];
      }
      volume /= bufferLength;
      volume /= 256; // 数据是8位无符号整数，最大值为255
      console.log('Volume:', volume);
      volumeNum.value = volume;
      // 发送音量数据到主进程或其他渲染器进程
      ipcRenderer.send('microphone-volume', volume);
    }, 100); // 每100毫秒读取一次
  })
  .catch(error => console.error('Error accessing microphone:', error));
</script>

<template>
  <h1>{{ volumeNum }}</h1>
</template>

